package leetcode.hot100;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * @author kl liu
 * @description
 * @date 2021/8/10 2:51 下午
 */
@SuppressWarnings("all")
public class _448_找到所有数组中消失的数字_原地修改 {

    /**
     * 给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间 [1, n] 内
     * 请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回结果
     * 输入：nums = [1,1,3]
     * 输出：[2]
     */
    public List<Integer> findDisappearedNumbers(int[] nums) {
        int n = nums.length;
        for (int num : nums) {
            int x = (num - 1) % n; //x=0        x=0        x=2
            nums[x] += n;          //num[0]=3   num[0]=3   num[1]=4
        }
        List<Integer> ret = new ArrayList<Integer>();
        for (int i = 0; i < n; i++) {
            // 3<=n,缺失的数=1+1=2
            if (nums[i] <= n) {
                ret.add(i + 1);
            }
        }
        return ret;
    }
}
